<?php

/**
 * Curso form.
 *
 * @package    ecampus
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class CursoForm extends BaseCursoForm
{
    public function  configure() {
//        parent::configure();
//        unset( $this['cantidad_parciales'],$this['cantidad_trabajos'] );
        $this->useFields(array('nombre','descripcion','codigo_curso','id_materia','anio','id_docente'));

        $this->widgetSchema['anio'] = new sfWidgetFormChoice(array(
            'choices' => $this->getObject()->getPosiblesAnios(),
            'expanded' => false,
            'label' => 'Año'
        ));

        ////widget para que identifique la materia correspondiente directamente desde la BD
        $this->widgetSchema['id_materia'] = new sfWidgetFormDoctrineChoice(array(
            'model' => 'Materia',
            'multiple' => false,
            'label' => 'Materia'
        ));
        $this->widgetSchema['id_docente'] = new sfWidgetFormDoctrineChoice(array(
                'model' => 'Docente',
                'multiple' => false,
                'label' => 'Docente a cargo'
        ));
        //textarea para indicar la descripcion del curso
        $this->widgetSchema['descripcion'] = new sfWidgetFormTextarea();

        //configuracion adicional
//        $this->addSubForms();
//        $form = new HorarioCursoCollectionForm(null, array(
//                                'curso' => $this->getObject(),
//                                'size' => 2
//                                )
//                );
//        $this->embedForm('Horarios', $form);
        $this->addSubForms();
//        $this->validatorSchema->setPostValidator( new HorarioCursoValidatorSchema(array('anio',), $options, $messages) );
    }
    public function removeFields()
    {
        //unset(  $this['cantidad_parciales'],$this['cantidad_trabajos']      );
    }
    public function addSubForms()
    {
        $subForm = new sfForm();
//      for ($i = 0; $i < 2; $i++)
      {
        $horario = new HorarioCurso();
        $horario->Curso = $this->getObject();

        $formulario = new HorarioCursoForm($horario);

//        $subForm->embedForm('Horario2', $formulario);
      }
//          $this->embedForm('Horarios', $subForm);
      $this->embedForm('Horario', $formulario  );

      $this->validatorSchema->setPostValidator(
              new   sfValidatorCallback(array('callback' => array($this, 'checkHorarios')))
            );
    }
    public function checkHorarios($validator, $values)
    {
        $dia_buscado = $values['Horario']['dia'];
        $anio = $values['anio'];
        $cursos = Doctrine_Core::getTable('Curso')->findBy('anio', $anio);
        $i = 0;
//        array($v_horarios);
        foreach($cursos as $curso)
        {

            foreach (($curso->getHorarios() ) as $horario)
            {
                $dia = $horario->getDia();

                if($dia == $dia_buscado)
                {
                    $v_horarios[0][$i] = $horario->getHoraDesde();
                    $v_horarios[1][$i] = $horario->getHoraHasta();
                    $i++;
                }
            }
        }
        $b = true;
        for($j = 0; $j < $i;$j++)
        {
//            echo $v_horarios[0][$j]. " ".$v_horarios[1][$j]."<br />";
//            echo strtotime($v_horarios[0][$j]). " ".strtotime($v_horarios[1][$j])."<br />";
//               $hdesde = strtotime( $v_horarios[0][$j]);
//               $hhasta = strtotime($v_horarios[1][$j]);
              $hdesde = $v_horarios[0][$j];
              $hhasta = $v_horarios[1][$j];


               $hora_desde = $values['Horario']['hora_desde'];
               $hora_hasta = $values['Horario']['hora_hasta'];

               if(HorarioCurso::haySolapamiento($hdesde, $hhasta, $hora_desde, $hora_hasta))
               {
                   $b &= false;
               }
        }
//                $q = Doctrine_Query::create()
//                ->select('hc.hora_desde fdesde,hc.hora_hasta fhasta')
//                ->from('curso c')
//                    ->leftJoin('horariocurso hc with hc.id_curso=c.id_curso')
//                ->where('hc.dia = ?',$values['Horario']['dia'])
//                        ->andwhere('c.anio = ?',$values['anio'])
//                ->fetchArray();
//
//
//
//                $b = true;
//        foreach($q as $horario)
//        {
//            if(HorarioCurso::haySolapamiento($horario['fdesde'], $horario['fhasta'], $values['Horario']['hora_desde'], $values['Horario']['hora_hasta']))
//            {
//                $b &= false;
//            }
//        }
        if(!$b)
//        if( !HorarioCurso::horarioDisponible($values['anio'], $values['Horario']['dia'], $values['Horario']['hora_desde'], $values['Horario']['hora_hasta']))
//        if( !HorarioCurso::horarioDisponible($values['anio'], $values['Horario']['dia'], $values['Horario']['hora_desde'], $values['Horario']['hora_hasta']))
        {
          // si el horario esta repetido, lanzar un error
          throw new sfValidatorError($validator, 'El horario no se puede asignar');
        }
        // si el horario es correcto, retorna los clean values
        return $values;
      }

//    public function  saveEmbeddedForms($con = null, $forms = null) {
//
//        if( null === $forms )
//        {
//            $horarios = $this->getValue('Horarios');
//            $forms = $this->embeddedForms;
//
//            foreach( $this->embeddedForms['Horarios'] as $name => $form ){
//                if(!isset ($horarios['dia']) || !isset ($horarios['hora_desde']) || !isset ($horarios['hora_hasta']) )
//                {
//                    unset( $forms['Horarios'][$name] );
//                }
//            }
//        }
//        parent::saveEmbeddedForms($con, $forms);
//    }
}
